﻿//*********************************************************//
//    Copyright (c) Microsoft. All rights reserved.
//    
//    Apache 2.0 License
//    
//    You may obtain a copy of the License at
//    http://www.apache.org/licenses/LICENSE-2.0
//    
//    Unless required by applicable law or agreed to in writing, software 
//    distributed under the License is distributed on an "AS IS" BASIS, 
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
//    implied. See the License for the specific language governing 
//    permissions and limitations under the License.
//
//*********************************************************//

using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Microsoft.NodejsTools.Npm {
    public interface INpmController : INpmLogSource, IDisposable {
        event EventHandler StartingRefresh;
        
        void Refresh();
        
        event EventHandler FinishedRefresh;
        
        IRootPackage RootPackage { get; }
        
        IGlobalPackages GlobalPackages { get; }
        
        INpmCommander CreateNpmCommander();

        Task<IPackageCatalog> GetRepositoryCatalogAsync(bool forceDownload, IProgress<string> progress);

        IPackageCatalog MostRecentlyLoadedCatalog { get; }

        string ListBaseDirectory { get; }
    }
}